package com.partsoft.dits;

import java.io.InputStream;
import java.io.Reader;


/**
 * 数据广播器
 */
public interface DataBroadcaster extends DataIntegrateProcessor {
	
	boolean supportData(Class<? extends DataEdgeDescriptor> descriptorClazz);
	
	boolean supportData(DataEdgeDescriptor dataDescriptor);
	
	/**
	 * 广播数据
	 * @param dataDescriptor 数据描述对象
	 * @param bytes 广播的数据字节。
	 */
	void broadcast(DataEdgeDescriptor dataDescriptor, byte[] bytes);
	
	/**
	 * 广播数据
	 * @param dataDescriptor 数据描述对象
	 * @param bytes 广播的数据字节。
	 * @param accepter 选择器
	 */
	void broadcast(DataEdgeDescriptor dataDescriptor, byte[] bytes, DescriptorAccepter<EdgeDescriptor> accepter);
	
	/**
	 * 执行处理（调用{@link #broadcast(DataEdgeDescriptor, byte[])}),<br/>
	 * 把{@link DataIntegrateBatch#getInputParameter()}转换成byte[]类型再调用{@linke #broadcast(DataEdgeDescriptor, byte[])}，<br/>
	 * 支持以下输入类型:<br/>
	 * <ul>
	 * 		<li>{@link InputStream}</li>
	 * 		<li>{@link Reader}</li>
	 * 		<li>{@link String}</li>，会自动转换成UTF-8编码的字节。
	 * 		<li>{@link byte}[]</li>
	 * 		<li>{@link Byte}[]</li>
	 * </ul>
	 * @param batch 参见{@link DataIntegrateBatch}。<br/>
	 * 如果{@link DataIntegrateBatch#isProcessed()}为真表示已处理<br/>
	 * 通过{@link DataIntegrateBatch#getResult()}获得返回值。<br/>
	 * 如果{@link DataIntegrateBatch#hasException()}为真表示有处理异常。<br/>
	 * 通过{@link DataIntegrateBatch#getException()}获得异常({@link Throwable})句柄。
	 */
	void process(DataIntegrateBatch batch);
	
}
